#include "GatherDataHandlerMemory.h"
#include "stdio.h"
#include "heart_task.h"

//extern 关键字用于声明一个变量或函数，而不是定义它。它的核心作用是告诉编译器：“这个变量/函数在别的某个源文件里已经定义了，你尽管用，链接器会去找到它的实际位置。”
//当你有一个全局变量在一个源文件（.c文件）中定义，并希望在另一个源文件中使用时，就需要在另一个文件中用 extern 来声明它
//以后对于处理完了以后得数据 其他地方要使用 可以用 extern
extern int heartState;
int times=0;
GatherDataTarget dataTarget;

//清理数据
u8 clearData(const GatherData *data)
{
    if (data->temp>165)
    {
        //本次采集就不正常
        times++;
        if (times>10)//连续10次数据采集都不正常  --有可能设备出问题
        {
            heartState=0;
            return 0;
        }
        return 1;
    }else
    {
        times=0;
        heartState=1;
        return 0;
    }
}

//对数据进行加工
void processData(const GatherData *data)
{
    //温度、湿度、雨滴、烟雾、光照
    dataTarget.temp=data->temp;
    dataTarget.humi=data->humi;
    dataTarget.raidrop=data->raidrop;
    dataTarget.smoke=(data->smoke/40)>100?100:data->smoke/40;
    dataTarget.sunshine=(100-data->sunshine/40)>100?100:100-data->sunshine/40;
}

//数据处理
void handlerData(GatherData *data)
{
    //1.非空判断
    if (data==NULL)
    {
        printf("gather data is NULL \r\n");
        return;
    }
    //2.数据清洁--过滤一些无效的数据
    u8 state =clearData(data);
    if (state) return;
    //3.当前的心跳是否正常
    if (!heartState) return;
    //4.数据的处理
    processData(data);
    //5.后续对于处理完以后得数据要进行远程传输
    //调用http请求 加密 压缩-速度
}